javascript oop、instanceof 和基类
全部标签 我有一个像这样的基础抽象类;classX{public:virtual~X(){}virtualdoSomething()=0;};然后我用几个类(如Y、Z等)来实现它,每个类都有自己的构造函数、析构函数和doSomething实现。在我的主要职能中,我这样做;intmain(){std::vectorv;X*x1=newY();X*x2=newZ();v.push_back(x1);v.push_back(x2);for(autop:v){p->doSomething()}}这会按预期调用相应的doSomething实现。但我的问题是我使用指向抽象类的指针通过其基类来操纵派生类的层次
classMyDerived:publicIncredble>,And,BaseClass,Name>{public:MyDerived();}MyDerived::MyDerived:???(params){}有没有什么方法可以在不写全名和类型定义的情况下调用基本构造函数?原因很明显是为了避免代码重复,并在基类模板参数中的某个细节发生变化时引入多个位置进行更改。第2级:templateclassMyDerived:publicIncredble>,And,BaseClass,Name>{public:MyDerived();}templateMyDerived::MyDerived:
假设我有一个基类A1和派生类B1和B2。例如(人为的):classA1{public:intfoo(intinput);};classB1:publicA1{public:intbar(intinput){returnfoo(input);}};classB2:publicA1{public:intbar(intinput){returnfoo(foo(input));}};是否可以创建与B1和B2相同但派生自A2而不是A1的类C1和C2,而不必重新定义“B”?即,我只想将“foo”换成C1和C2中的另一个函数,而无需重新定义如下:classA2{public:intnewFoo(in
有什么方法可以检查两个实例是否是同一个派生类?像这样的东西:Base*inst1=newA();Base*inst2=newB();Base*inst3=newA();boolb1=(inst1->class==inst2->class);//class==inst3->class);//显然我可以只向基类添加一个虚函数并实现每个派生类以返回一个唯一值。但是,我宁愿不必为派生类实现任何特定的东西,因为我正在制作一个基于派生自这个基类的API。 最佳答案 typeid(*inst1)==typeid(*inst2)假设Base至少有一
假设我有以下类层次结构:templateclassTestBase{public:virtualTconst&do_foo()=0;};templateclassTestDerived:publicvirtualTestBase{public:virtualintdo_bar(){returndo_foo()+1;}};GCC吐出以下内容:error:therearenoargumentsto‘do_foo’thatdependonatemplateparameter,soadeclarationof‘do_foo’mustbeavailable[-fpermissive]note:(
例如:classDerived:publicBase{Derived(constBase&rhs){//Isthisacopyconstructor?}constDerived&operator=(constBase&rhs){//Isthisacopyassignmentoperator?}};显示的构造函数算作复制构造函数吗?显示的赋值运算符算作复制赋值运算符吗? 最佳答案 Doestheconstructorshowncountasacopyconstructor?没有。它不算作复制构造函数。它只是一个转换构造函数,而不是复制
在我处理的代码库的尘土飞扬的角落里,我遇到了一个看起来像这样的类层次结构:classBase1{intbase1;};classBase2{intbase2;};templateclassA:publicBase1{T_specialT;};templateclassA:publicBase2{int_special;};在A的特化中使用Base2令我感到惊讶。我一直在四处寻找以准确理解它的含义,但未能找到此类设计的任何示例或讨论。在我看来,这样做会导致A从Base1和Base2继承,而A的其他非特化用途将仅从Base1继承。这给我留下了几个问题:我的理解正确吗?是否有任何不明显的注意
有没有办法通过基类指针来判断子类的类型?我在这样的类构造函数中声明了一个指针在.h文件中baseclass*screen;在构造函数中screen=newchildclass();假设基类有5个不同的子类,在我的程序中我切换指针以指向各种子对象,我如何确定屏幕当前指向的对象的类型? 最佳答案 不要。使用虚拟调度为不同的派生类型实现不同的行为。 关于c++-使用基类指针确定子类的类型,我们在StackOverflow上找到一个类似的问题: https://sta
在我看到的所有关于多态性的示例中,基类的析构函数都是virtual并且它是用空主体定义的。我正在努力解决这个问题:为什么它必须是一个空的body?如果该方法只是声明为virtual而不是用空主体定义,为什么它不起作用?那岂不是默认的析构函数就实现了?或者它被声明为virtual的事实甚至会抑制默认定义并强制显式定义主体?这就是我的意思:classA{public:virtualvoidf();virtual~A(){}}classB:publicA{public:~B(){//destroywhatever}}为什么~A()不能像这样声明virtual~A();没有定义?另外,为什么在
我在尝试重用来自不同类的代码时偶然发现了一个问题。我把它贴在这里,希望你们中的一些人能够帮助我。我有一组类(B,C)派生自同一个类(A),它强制执行某些方法(foo,run)。B类实现了这些方法,B类和C类都提供了其他方法:#includetemplateclassA{public:A(){}virtual~A(){}virtualvoidfoo()const=0;//forceimplementationofthisfunctionvirtualvoidrun()const=0;//forceimplementationofthisfunction};templateclassB:p